package br.com.portalnet.view.managed;
  
  
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;  
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;  
import javax.faces.event.ActionEvent;  
import javax.servlet.http.HttpSession;
  
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;  
import org.primefaces.model.TreeNode;  

import br.com.portalnet.model.Equipamento;
import br.com.portalnet.model.Localidade;
import br.com.portalnet.model.Parametro;
import br.com.portalnet.persistence.EquipamentoDAO;
import br.com.portalnet.persistence.IEquipamentoDAO;
import br.com.portalnet.persistence.ILocalidadeDAO;
import br.com.portalnet.persistence.IParametroDAO;
import br.com.portalnet.persistence.IUsuarioDAO;
import br.com.portalnet.persistence.LocalidadeDAO;
import br.com.portalnet.persistence.ParametroDAO;
import br.com.portalnet.persistence.UsuarioDAO;
@ManagedBean 
@ViewScoped
public class ArvoreMB  {  
  
    private TreeNode root;  
  
     
	public List<Localidade> localidades;
	public  List<Equipamento> equipamentos;
	public List<Parametro> paramentros;
	
	private TreeNode selectedNode;  
    
    
	public ArvoreMB() 
	{
        
       carregaTree();
        
    }  
    

	public List<Equipamento> getEquipamentos() {
		return equipamentos;
	}

	public void setEquipamentos(List<Equipamento> equipamentos) {
		this.equipamentos = equipamentos;
	}

	public List<Parametro> getParamentros() {
		return paramentros;
	}

	public void setParamentros(List<Parametro> paramentros) {
		this.paramentros = paramentros;
	}	
  
    public TreeNode getRoot() {  
        return root;  
    }  
  
   
    
	
    public TreeNode getSelectedNode() {
		return selectedNode;
	}


	public void setSelectedNode(TreeNode selectedNode) {
		this.selectedNode = selectedNode;
	}

	
	public  void carregaTree()
	{
		
		 root = new DefaultTreeNode("Root", null); 
		
		try{
			
			long idLocal = 0;
			long nivel = 0;
			try
			{
				FacesContext facesContext = FacesContext.getCurrentInstance();  
				HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);  	
				String usuario = (String) session.getAttribute("usuario");
				String senha = (String) session.getAttribute("senha");	
				IUsuarioDAO userDAO = new UsuarioDAO();	
				
				try
				{
					idLocal =  userDAO.findUsuarioByNome(usuario).getLocalidade().getId();	
					
				}catch(Exception e)
				{
					System.out.println("Erro local:"+e);
				}
				try 
				{
					nivel =  userDAO.findUsuarioByNome(usuario).getNivel().getId();
					
				} catch (Exception e) {
					System.out.println("Erro nivel:"+e);
					
				}
					
				
			}
			catch(Exception e)
			{
				System.out.println("erro.: "+e);
				
			}
			
			ILocalidadeDAO localDAO = new LocalidadeDAO();
			if(nivel == 1)
			{				
				localidades = localDAO.list();
			}
			else
			{
				localidades = new ArrayList<Localidade>();
				localidades.clear();				
				localidades.add(localDAO.getLocalidade(idLocal));
			}		
			
			
			for(Localidade local : localidades)
			{
				
				TreeNode treeNodeLocal = new DefaultTreeNode(local.getCidade(), root);
				
				try
				{
					
					IEquipamentoDAO equipDAO = new EquipamentoDAO();
					
					equipamentos = equipDAO.listEquipByIdLocal(local);
					
					for(Equipamento equip : equipamentos)
					{
						
						TreeNode treeNodeEquip = new DefaultTreeNode(equip.getNome(), treeNodeLocal );
						
						
						try
						{
							IParametroDAO paramDAO = new ParametroDAO();
							
							paramentros = paramDAO.listParamByEquip(equip);
												
							for(Parametro param : paramentros)
							{
								TreeNode treeNodeParam = new DefaultTreeNode(param.getNome(), treeNodeEquip);
														
							}
						
						}catch(Exception e)
						{
							
						}
					
					}
				
				
				}catch(Exception e){}
			
			
			}
	
		}catch(Exception e){}	
	
	}
	
	
	    
}  
     
